/***********************************************************************************************//**
*\n  @file       device_gpio.hpp
*\n  @brief      GPIO设备类
*\n  @details
*\n -----------------------------------------------------------------------------------
*\n  文件说明：
*\n       1. GPIO设备类
*\n       2. PS MIO端口读写操作
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01   罗先能        2021.4.12          创建
*\n
***************************************************************************************************/
#pragma once
#ifndef H_79FFF000_8E28_43d5_BAA5_6B4FA323CCB4_
#define H_79FFF000_8E28_43d5_BAA5_6B4FA323CCB4_

/**************************************************************************************************
* 头文件
***************************************************************************************************/
#include "device.hpp"

/**************************************************************************************************
* 宏定义、结构定义
***************************************************************************************************/
#define   MIO38   	   38	///< gpio mio38 编号
#define   MIO39   	   39	///< gpio mio39 编号

#ifdef  __cplusplus
/*************************************************************************************//**
*\n 类名称： TAxiGpio()
*\n 功能描述：
*\n     1. GPIO类,通过物理地址端口操作
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.5.12     创建
*****************************************************************************************/
class TAxiGpio : public TDevice
{
public:
	virtual ~TAxiGpio();
	TAxiGpio(const char name[], TBus *gpioBus);

// -- 继承于基类 ----
protected:
	// char Name[32];   		// 实例名称
	// TBus *pBus;	  			// bus总线
	// pthread_rwlock_t mLock;  // 锁

public:
	// virtual int Init() 												override;
	// virtual int Open() 												override;
	// virtual int Close() 												override;
	// virtual int Lock() 												override;
	// virtual int Unlock() 											override;
	// virtual int Read(long address, void *pBuf, long iSizeToRead) 	override;
	virtual int Write(long address, void *pBuf, long iSizeToWrite)	override;
	// virtual int Ioctl(long cmd, void *pBuf, long *pSize) 			override;

};





/*************************************************************************************//**
*\n 类名称： TGpioFs()
*\n 功能描述：
*\n      1. GPIO类,通过sysfs文件操作
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.5.12     创建
*****************************************************************************************/
class TGpioFs : public TDevice
{
// -- 增加 ----
public:
	TGpioFs(const char name[], int iNo, int direct, int defaultOut_or_edge);
	virtual ~TGpioFs();

private:
	int mNo;
	int mFd;
	int mDirection;

private:
	int Export(u32 gpio);
	int Unexport(u32 gpio);
	int SetDirection(u32 gpio, u32 out_flag);
	int SetValue(u32 gpio, u32 value);
	int GetValue(u32 gpio, u32 *value);
	int SetEdge(u32 gpio, char *edge);
	int FdOpen(u32 gpio);
	int FdClose(int fd);


// -- 继承于基类 ----
protected:
	// char Name[32];   		// 实例名称
	// TBus *pBus;	  			// bus总线
	// pthread_rwlock_t mLock;  // 锁

public:
	// virtual int Init() 												override;
	virtual int Open(void *pHandle) 								override;
	virtual int Close(void *pHandle) 								override;
	// virtual int Lock() 												override;
	// virtual int Unlock() 											override;
	virtual int Read(long address, void *pBuf, long iSizeToRead) 	override;
	virtual int Write(long address, void *pBuf, long iSizeToWrite)	override;
	// virtual int Ioctl(long cmd, void *pBuf, long *pSize) 			override;
};
#endif // __cplusplus



/**************************************************************************************************
* 全局变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有函数声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 全局函数声明、定义
***************************************************************************************************/

#endif // !defined(EA_79FFF000_8E28_43d5_BAA5_6B4FA323CCB4__INCLUDED_)

